﻿// RankingSejmowy 1.0 - Polish parliment statistics for the masses.
// Copyright (C) 2010 Jarosław Dubrownik
//  
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//  
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//  
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
using System;
using System.Linq;
using HtmlAgilityPack;
using RankingSejmowy.Common.Logging;
using RankingSejmowy.Model.Import;

namespace RankingSejmowy.BLL.Import.Spider.Analyzers
{
    public abstract class AgilityBasePageAnalyzer : PageAnalyzerBase
    {
        protected AgilityBasePageAnalyzer(IProgressLog progressLog) : base(progressLog)
        {
        }

        public virtual SiteMapPage[] AnalyzePage(Uri baseUri, DownloadedPage page, FetchSetup fetchSetup)
        {
            if (fetchSetup.Inceremental)
            {
                return AnalyzePageIncremental(baseUri, page, fetchSetup);
            }

            return AnalyzePageNormal(baseUri, page);
        }

        protected SiteMapPage[] AnalyzePageNormal(Uri baseUri, DownloadedPage page)
        {
            var doc = new HtmlDocument();
            doc.LoadHtml(page.Content);
            var siteMapPages = doc.DocumentNode.SelectNodes("//td[@align='CENTER']/a/@href").Select(
                x => new SiteMapPage
                         {
                             Uri = new Uri(baseUri, x.Attributes["href"].Value)
                         }).ToArray();
            return siteMapPages;
        }

        public abstract SiteMapPage[] AnalyzePageIncremental(Uri baseUri, DownloadedPage downloadedPage,
                                                             FetchSetup fetchSetup);
    }
}